package View;

import java.util.Iterator;

import DAO.AlunoDaoImplArquivo;
import DAO.DisciplinaDaoImplArquivo;
import DAO.HistoricoTurmaDaoImplArquivo;
import DAO.ProfessorDaoImplArquivo;
import DAO.TurmaDaoImplArquivo;
import Pojo.Aluno;
import Pojo.HistoricoTurma;
import Pojo.Turma;

/** Classe de operações referentes ao Histórico de uma Turma.
*
* @author Maione José
* 
* */
public class MenuHistoricoTurma {
	
	/**Cadastro de Histórico Referente a uma turma/aluno
	 * 
	 * @param novaTurma
	 * @param turmaDao
	 * @param alunoDao
	 * @param historicoTurmaDao
	 */
	public void cadastrarHistoricoTurma(Turma novaTurma, TurmaDaoImplArquivo turmaDao, AlunoDaoImplArquivo alunoDao, HistoricoTurmaDaoImplArquivo historicoTurmaDao){
		int continuar=1;
		int idAluno;
		int quantidade;
		int capacidade=novaTurma.getNumeroDeVagas();
		MenuAluno menuAluno = new MenuAluno();
		Aluno aluno;
		HistoricoTurma historicoTurma;
		System.out.println("Informe os alunos da turma criada: ");
		System.out.println("Disciplina: "+novaTurma.getDisciplina().getNome());
		System.out.println("Professor: "+novaTurma.getProfessor().getNome());
		while((continuar==1)&&(capacidade>0)){
			quantidade = menuAluno.escolherAlunosNaoCadastradosTurma(novaTurma, alunoDao,historicoTurmaDao);
			if (quantidade>0){
				idAluno = Console.readInteger();
				aluno = alunoDao.procurarPorId(idAluno);
				if ((aluno==null)||(this.verificarHistoricoTurmaAluno(historicoTurmaDao, idAluno, novaTurma.getIdTurma())==1)){
					System.out.println("Entrada inválida. Aluno não encontrado.");
					continue;
				}
				historicoTurma = new HistoricoTurma(historicoTurmaDao.getProximoId(),0,0.0,false,aluno,novaTurma);
				
				historicoTurmaDao.adicionarHistoricoTurma(historicoTurma);
				
				System.out.println("Deseja cadastrar mais algum aluno? (1-Sim, 0-Não)");
				continuar = Console.readInteger();
				capacidade--;
			} else {
				System.out.println("Todos os alunos foram cadastrados para esta Turma. Pressione Enter para continuar");
				Console.readString();
				continuar=0;
			}
		}
		if (capacidade==0){
			System.out.println("Quantidade de vagas da turma esgotada. Impossível cadastrar mais alunos.");
		}
	}
	
	/**Método para informação de dados referentes ao histórico.
	 * 
	 * @param historicoTurma
	 * @param historicoTurmaDao
	 * @param notaFinal
	 * @param cargaHoraria
	 * @param notaTotal
	 * @return
	 */
	public HistoricoTurma lancarDadosHistoricoTurma(HistoricoTurma historicoTurma, HistoricoTurmaDaoImplArquivo historicoTurmaDao, double notaFinal, int cargaHoraria, double notaTotal){
		System.out.println("Informe a quantidade de faltas para o aluno "+historicoTurma.getAluno().getNome()+":");
		int qtdFaltas = Console.readInteger();
		while (qtdFaltas<0||qtdFaltas>cargaHoraria){
			System.out.println("Número de faltas inválido. Informe novamente:");
			qtdFaltas = Console.readInteger();	
		}
		boolean aprovado = false;
		if  ((notaFinal >= 0.6*notaTotal)&&(qtdFaltas <= (0.25*cargaHoraria))){
			aprovado = true;
		}
		HistoricoTurma novoHistoricoTurma = new HistoricoTurma(historicoTurma.getIdHistoricoTurma(), qtdFaltas, notaFinal, aprovado,historicoTurma.getAluno(),historicoTurma.getTurma());
		
		historicoTurmaDao.removerHistoricoTurma(historicoTurma);
		historicoTurmaDao.adicionarHistoricoTurma(novoHistoricoTurma);
		return novoHistoricoTurma;
	}
	
	/**
	 * Método para verificar a matricula de um aluno em uma turma
	 * @param historicoTurmaDao
	 * @param idAluno
	 * @param idTurma
	 * @return 1 se existe ou 0 senão
	 */
	public int verificarHistoricoTurmaAluno(HistoricoTurmaDaoImplArquivo historicoTurmaDao, int idAluno, int idTurma){
		Iterator<HistoricoTurma> i = historicoTurmaDao.getListaHistoricoTurmas().iterator();
		HistoricoTurma historicoTurma;
		while(i.hasNext()){
			historicoTurma = (HistoricoTurma) i.next();
			if ((historicoTurma.getAluno().getIdAluno() == idAluno)&&(historicoTurma.getTurma().getIdTurma()==idTurma)){
				return(1);
			}
		}
		return(0);
	}
}
